import axios from "axios";

var service = null;
// 创建新的axios实例
function axiosCreate(url) {
  service = axios.create({
    baseURL: url,
    timeout: 10 * 1000,
  });
  // 2.请求拦截器
  service.interceptors.request.use(
    (config) => {
      config.data = JSON.stringify(config.data); //数据转化,也可以使用qs转换
      // 如果没有设置头，那么采用默认的
      if (!config.headers["Contentt-Type"]) {
        config.headers["Contentt-Type"] = "application/json";
      }
      return config;
    },
    (error) => {
      Promise.reject(error);
    }
  );

  // 3.响应拦截器
  service.interceptors.response.use(
    (response) => {
      return response;
    },
    (error) => {
      /***** 接收到异常响应的处理开始 *****/
      if (error && error.response) {
        // 1.公共错误处理
        // 2.根据响应码具体处理
        switch (error.response.status) {
          case 400:
            error.message = "错误请求";
            break;
          case 401:
            error.message = "未授权，请重新登录";
            break;
          case 403:
            error.message = "拒绝访问";
            break;
          case 404:
            error.message = "请求错误,未找到该资源";
            window.location.href = "/NotFound";
            break;
          case 405:
            error.message = "请求方法未允许";
            break;
          case 408:
            error.message = "请求超时";
            break;
          case 500:
            error.message = "服务器端出错";
            break;
          case 501:
            error.message = "网络未实现";
            break;
          case 502:
            error.message = "网络错误";
            break;
          case 503:
            error.message = "服务不可用";
            break;
          case 504:
            error.message = "网络超时";
            break;
          case 505:
            error.message = "http版本不支持该请求";
            break;
          default:
            error.message = `连接错误${error.response.status}`;
        }
      } else {
        console.log("网络连接失败");
      }

      /***** 处理结束 *****/
      //如果不需要错误处理，以上的处理过程都可省略
      return Promise.resolve(error.response);
    }
  );
}

export { axiosCreate, service };
